#include <iostream>
#include <stdexcept>

// noexcept 告诉编译器可以优化
// void h() noexcept;     // 承诺不抛
// void k() noexcept(false);  // 显式告诉编译器：我**可能**抛异常

// 1、一旦 noexcept 函数真的抛出异常，直接 std::terminate()，连栈回溯都不做，程序当场死亡
// 2、如果你把 noexcept 去掉，异常就能正常被 catch(...) 接住
void i_will_not_throw() noexcept {
    std::cout << "进去就抛异常，但我说自己 noexcept\n";
    throw std::runtime_error("我撒谎了");
}

int main() {
    try {
        i_will_not_throw();   // 注意：这里 **没有** catch
    }
    catch (...) {
        std::cout << "捕获到异常\n";
    }
    return 0;
}